package com.example.libpro.DBEntity;

import java.io.Serializable;

/**
 * 图书管理系统图书数据实体类
 * 作用：1. 封装图书核心信息，映射数据库"book"表结构；2. 作为各层（DAO层、服务层、用户层）间图书数据的传输载体；
 * 3. 提供统一的getter/setter方法，支持图书信息的新增、修改、查询操作
 * 关联表：book（图书表）
 * 核心属性：图书ID、书名、作者、分类、总数量、当前在库数量、逻辑删除标识
 */
public class BookEntity implements Serializable {
    // 序列化ID（用于跨组件传输，如Intent传递图书信息）
    private static final long serialVersionUID = 1L;

    // 核心属性（与"book"表字段一一对应）
    private Integer bookId;       // 图书ID（自增主键，数据库生成）
    private String bookName;      // 书名（非空）
    private String author;        // 作者（非空）
    private String category;      // 分类（非空，如"计算机科学"、"外国文学"）
    private Integer totalCount;   // 总数量（非空，图书馆该图书的总册数）
    private Integer currentStock; // 当前在库数量（非空，可借阅数量，≤totalCount）
    private Integer isDeleted;    // 逻辑删除标识（0=未删除，1=已删除，默认0）

    // 无参构造（用于Gson解析、DAO层查询结果映射）
    /**
     * 无参构造方法
     * 功能：供JSON解析（如Gson）、DAO层Cursor结果映射时创建对象，避免反射报错
     */
    public BookEntity() {
    }

    // 全参构造（用于创建完整图书对象，如新增图书时）
    /**
     * 全参构造方法（不含bookId，因bookId为自增主键，由数据库生成）
     * @param bookName 书名（非空）
     * @param author 作者（非空）
     * @param category 分类（非空）
     * @param totalCount 总数量（非空，≥1）
     * @param currentStock 当前在库数量（非空，≤totalCount，默认等于totalCount）
     * @param isDeleted 逻辑删除标识（0=未删除，1=已删除，默认0）
     * 功能：创建完整的图书对象（除自增ID外），用于DAO层插入数据
     */
    public BookEntity(String bookName, String author, String category, Integer totalCount, Integer currentStock, Integer isDeleted) {
        this.bookName = bookName;
        this.author = author;
        this.category = category;
        this.totalCount = totalCount;
        this.currentStock = currentStock;
        this.isDeleted = isDeleted;
    }

    // Getter与Setter方法
    /**
     * 获取图书ID（自增主键）
     * @return Integer 图书ID（null表示未插入数据库）
     */
    public Integer getBookId() {
        return bookId;
    }

    /**
     * 设置图书ID（仅DAO层使用，因ID由数据库生成）
     * @param bookId 图书ID（数据库自增返回的值）
     */
    public void setBookId(Integer bookId) {
        this.bookId = bookId;
    }

    /**
     * 获取书名
     * @return String 书名（非空）
     */
    public String getBookName() {
        return bookName;
    }

    /**
     * 设置书名
     * @param bookName 书名（非空）
     */
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    /**
     * 获取作者
     * @return String 作者（非空）
     */
    public String getAuthor() {
        return author;
    }

    /**
     * 设置作者
     * @param author 作者（非空）
     */
    public void setAuthor(String author) {
        this.author = author;
    }

    /**
     * 获取图书分类
     * @return String 图书分类（非空）
     */
    public String getCategory() {
        return category;
    }

    /**
     * 设置图书分类
     * @param category 图书分类（非空，如"计算机"、"文学"）
     */
    public void setCategory(String category) {
        this.category = category;
    }

    /**
     * 获取图书总数量
     * @return Integer 总数量（≥1，非空）
     */
    public Integer getTotalCount() {
        return totalCount;
    }

    /**
     * 设置图书总数量
     * @param totalCount 总数量（≥1，非空，修改时需确保≥currentStock）
     */
    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    /**
     * 获取当前在库数量（可借阅数量）
     * @return Integer 当前在库数量（≥0，≤totalCount，非空）
     */
    public Integer getCurrentStock() {
        return currentStock;
    }

    /**
     * 设置当前在库数量
     * @param currentStock 当前在库数量（≥0，≤totalCount，非空，借书时减1，还书时加1）
     */
    public void setCurrentStock(Integer currentStock) {
        this.currentStock = currentStock;
    }

    /**
     * 获取逻辑删除标识
     * @return Integer 逻辑删除标识（0=未删除，1=已删除）
     */
    public Integer getIsDeleted() {
        return isDeleted;
    }

    /**
     * 设置逻辑删除标识
     * @param isDeleted 逻辑删除标识（默认0，删除时设为1）
     */
    public void setIsDeleted(Integer isDeleted) {
        this.isDeleted = isDeleted;
    }

    // toString方法（用于调试）
    /**
     * 重写toString方法
     * @return String 图书对象的字符串表示（含所有属性值）
     * 功能：调试时打印图书信息，便于定位数据问题
     */
    @Override
    public String toString() {
        return "BookEntity{" +
                "bookId=" + bookId +
                ", bookName='" + bookName + '\'' +
                ", author='" + author + '\'' +
                ", category='" + category + '\'' +
                ", totalCount=" + totalCount +
                ", currentStock=" + currentStock +
                ", isDeleted=" + isDeleted +
                '}';
    }
}